// 引入
const Koa = require("koa"); // 创建服务端应用的
const KoaRouter = require("koa-router"); // 定义接口
const KoaBodyparser = require("koa-bodyparser"); // 解析请求体的

const fs = require("fs");

const app = new Koa();
const router = new KoaRouter();

const savePath = __dirname + "/users.json";
const idPath = __dirname + "/id.txt";
let id = 1;

// 每次重启，id 都会从内存中清除，如何保证 id 永远是唯一的值
if (fs.existsSync(idPath)) {
    id = Number(fs.readFileSync(idPath, "utf-8"));
}

// 创建用户
router.post("/users", async (ctx) => {
    // 解析请求体
    const data = ctx.request.body;
    data.id = id;
    // 查看有没有已存在的用户
    // 存在
    if (fs.existsSync(savePath)) {
        const res = fs.readFileSync(savePath);
        const userArr = JSON.parse(res);
        userArr.push(data);
        fs.writeFileSync(savePath, JSON.stringify(userArr));
        // 不存在
    } else {
        fs.writeFileSync(savePath, JSON.stringify([data]));
    }
    id++;
    fs.writeFileSync(idPath, String(id));
    ctx.body = {
        code: 201,
        message: "添加成功",
    };
});

// 获取用户列表
router.get("/users", async (ctx) => {
    // 判断文件是否存在
    if (fs.existsSync(savePath)) {
        const userStr = fs.readFileSync(savePath);
        ctx.body = {
            code: 200,
            data: JSON.parse(userStr),
            message: "获取用户列表成功",
        };
    } else {
        ctx.body = {
            code: 200,
            data: [],
            message: "获取用户列表成功",
        };
    }
});

// 修改用户信息
router.put("/users/:id", async (ctx) => {
    // 获取参数
    const { id } = ctx.params;
    const { password } = ctx.request.body;
    console.log("password", password);
    // 修改
    const userArr = JSON.parse(fs.readFileSync(savePath));
    const userIndex = userArr.findIndex((item) => item.id === Number(id));
    if (userIndex >= 0) {
        userArr[userIndex].password = password;
    }
    // 保存
    fs.writeFileSync(savePath, JSON.stringify(userArr));
    ctx.body = {
        code: 204,
        message: "修改成功",
    };
});

// 删除用户
router.delete("/users/:id", async (ctx) => {
    // 获取参数
    const { id } = ctx.params;
    // 删除
    const userArr = JSON.parse(fs.readFileSync(savePath));
    const userIndex = userArr.findIndex((item) => item.id === Number(id));
    if (userIndex >= 0) {
        userArr.splice(userIndex, 1);
    }
    // 保存
    fs.writeFileSync(savePath, JSON.stringify(userArr));
    ctx.body = {
        code: 204,
        message: "删除成功",
    };
});

// 第一个中间件
app.use(KoaBodyparser());

// 第二个中间件
app.use(router.routes());

// 监听端口，提供服务
app.listen(7000, () => {
    console.log("http://localhost:7000");
});
